﻿using System;
using System.Collections.Generic;
using System.Text;

namespace SingleMode
{
    // 多线程Singleton实现
    public class MultiThread_Singleton
    {

        private static volatile MultiThread_Singleton instance = null;
        // 关键字volatile，保证严格意义上的读线程编译器在代码编译时对指令不进行微调
        private static object lockHelper = new Object();
        private MultiThread_Singleton() { }
        public static MultiThread_Singleton Insatnce
        {
            get
            {
                if (instance == null)
                {
                    lock (lockHelper)
                    {
                        if (instance == null) // 检验两次
                        {
                            instance = new MultiThread_Singleton();
                        }
                    }
                }
                return instance;
            }
        }
        //此程序对多线程是安全的，使用一个辅助对象lockHelper，保证只有一个线程创建实例


    }
}
